using System;

namespace DeSleeper.Library.PowerManagement
{
	public class PowerSettings
	{
		/// <summary>
		/// The time that the level of system activity must remain below the idle detection
		/// threshold before the system idle timer expires.
		/// </summary>
		public TimeSpan IdleTimeout { get; set; }
		/// <summary>
		/// The level of system activity that defines the threshold for idle detection,
		/// expressed as a percentage.
		/// </summary>
		public decimal IdleThreshold { get; set; }
        public ProcessorPowerSettings ProcessorPowerSettings { get; set; }

		/// <summary>
		/// The maximum system sleep state the system is allowed to engage.
		/// </summary>
		public SystemPowerState SleepTargetState { get; set; }

		/// <summary>
		/// The time before the display is turned off in seconds.
		/// </summary>
		public TimeSpan VideoTimeout { get; set; }

		/// <summary>
		/// The time before power to fixed disk drives is turned off.
		/// </summary>
		public TimeSpan HardDriveTimeout { get; set; }

		/// <summary>
		/// If true, the system will turn on cooling fans and run the processor at full
		/// speed when passive cooling is specified. This causes the operating system to be
		/// biased towards using the fan and running the processor at full speed.
		/// </summary>
		public bool FavorFanOverThrottle { get; set; }
		/// <summary>
		/// The lower limit that the processor may be throttled down to prior to turning on
		/// system fans in response to a thermal event, expressed as a percentage.
		/// </summary>
		public decimal ThrottleBeforeFan { get; set; }
		/// <summary>
		/// The processor throttle level to be imposed by the system expressed as a percentage.
		/// </summary>
		public decimal ForcedThrottle { get; set; }

		public PowerActionPolicy PowerButtonAction { get; set;}
		public PowerActionPolicy SleepButtonAction { get; set; }
		public PowerActionPolicy LidAction { get; set; }
	}
}